package xjay.ai.emotionalsupport.rag;

import jakarta.annotation.Resource;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.Embedding;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.pgvector.PgVectorStore;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import xjay.ai.emotionalsupport.agent.CharacterBaseAgent;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;

import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgDistanceType.COSINE_DISTANCE;
import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIndexType.HNSW;

@Configuration
public class VectorStoreConfig {


    @Bean
    VectorStore simpleVectorStore(EmbeddingModel dashscopeEmbeddingModel) {
        return SimpleVectorStore.builder(dashscopeEmbeddingModel).build();

    }

    @Bean
    public VectorStore pgVectorStore(@Qualifier("postgresqlJdbcTemplate") JdbcTemplate jdbcTemplate,
                                           EmbeddingModel dashscopeEmbeddingModel) {
        return PgVectorStore.builder(jdbcTemplate, dashscopeEmbeddingModel)
                .dimensions(1536)                    // text-embedding-v2模型的维度
                .distanceType(COSINE_DISTANCE)       // 余弦距离
                .indexType(HNSW)                     // HNSW索引（高性能）
                .initializeSchema(true)              // 自动创建表结构（表级创建，而非数据库级创建，数据库要手动创建）
                .schemaName("public")                // 使用public模式
                .vectorTableName("vector_store")     // 表名
                .maxDocumentBatchSize(10000)         // 批处理大小
                .build();
    }

    @Bean
    public VectorStore mbtiVectorStore(@Qualifier("postgresqlJdbcTemplate") JdbcTemplate jdbcTemplate,
                                       EmbeddingModel dashscopeEmbeddingModel) {
        return PgVectorStore.builder(jdbcTemplate, dashscopeEmbeddingModel)
                .dimensions(1536)                    // text-embedding-v2模型的维度
                .distanceType(COSINE_DISTANCE)       // 余弦距离
                .indexType(HNSW)                     // HNSW索引（高性能）
                .initializeSchema(true)              // 自动创建表结构（表级创建，而非数据库级创建，数据库要手动创建）
                .schemaName("public")                // 使用public模式
                .vectorTableName("mbti_vector_store")     // 表名
                .maxDocumentBatchSize(10000)         // 批处理大小
                .build();
    }



}
